﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
// 原题连接：https://leetcode.cn/problems/merge-in-between-linked-lists/
/*
题目描述：
给你两个链表 list1 和 list2 ，它们包含的元素分别为 n 个和 m 个。
请你将 list1 中下标从 a 到 b 的全部节点都删除，并将list2 接在被删除节点的位置。
下图中蓝色边和节点展示了操作后的结果：
*/

// 开始解题：
// 方法1——模拟
struct ListNode* mergeInBetween(struct ListNode* list1, int a, int b, struct ListNode* list2) {
    int index = -1; // 因为下标从0开始，所以这里的index要初始化成-1
    struct ListNode* cur1 = list1;
    struct ListNode* tail2 = list2;
    struct ListNode* leftNode = NULL;
    struct ListNode* rightNode = NULL;

    // 先找到leftNode和rightNode
    while (cur1) {
        index++;
        if (a - 1 == index) {
            leftNode = cur1;
        }
        if (b + 1 == index) {
            rightNode = cur1;
            break;
        }
        cur1 = cur1->next;
    }

    // 在找到list2的尾
    while (tail2->next) {
        tail2 = tail2->next;
    }
    leftNode->next = list2;
    tail2->next = rightNode;
    return list1;
}